/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package examen3;

import java.util.ArrayList;
import java.util.List;
import org.jgap.FitnessFunction;
import org.jgap.IChromosome;
import org.jgap.impl.IntegerGene;

/**
 *
 * @author johnsolano
 */
public class EquipoFitnessFunction extends FitnessFunction {

    List equipos = new ArrayList();
    List rakins = new ArrayList();

    public EquipoFitnessFunction(List equipos, List rakins) {
        this.equipos = equipos;
        this.rakins = rakins;
    }

    @Override
    protected double evaluate(IChromosome chromosome) {
        double score = 0;
        double imdbScore = 0;

        List dups = new ArrayList();
        int badSolution = 1;

        for (int i = 0; i < chromosome.size(); i++) {

            IntegerGene agene = (IntegerGene) chromosome.getGene(i);
            int index = (Integer) chromosome.getGene(i).getAllele();

            if (dups.contains(index)) {
                badSolution = 0;
            } else {
                dups.add(index);
            }

            Equipo equipo = (Equipo) equipos.get(index);
            double genreScore = getGenreScore(equipo);
            if (genreScore == 0) {
                badSolution = 0;
            }
            // suma el score y 
            score = score + genreScore;
            //score = (score + equipo.getRaking());
        }
        return (score * badSolution);
    }

    private double getGenreScore(Equipo equipo) {
        double genreScore = 0;
//        double genreScore = 0;s
//        double genreScore = 0;
//        double genreScore = 0;
        // comparacion de equipos segun los ultimos 5 paridos donde 1 gano 0 empato -1 perdio
        //si gano entonces suma 2 al score si empato suma 1 score y si perdio 0 nada score
        if (equipo.getP1() == 1) {
            genreScore = genreScore + 2;
        } else {
            if (equipo.getP1() == 0) {
                genreScore = genreScore + 1;
            } else {
                if (equipo.getP1() == -1) {
                    genreScore = genreScore - 2;
                }
            }
        }
        if (equipo.getP2() == 1) {
            genreScore = genreScore + 2;
        } else {
            if (equipo.getP2() == 0) {
                genreScore = genreScore + 1;
            } else {
                if (equipo.getP2() == -1) {
                    genreScore = genreScore - 2;
                }
            }
        }
        if (equipo.getP3() == 1) {
            genreScore = genreScore + 2;
        } else {
            if (equipo.getP3() == 0) {
                genreScore = genreScore + 1;
            } else {
                if (equipo.getP3() == -1) {
                    genreScore = genreScore - 2;
                }
            }
        }
        if (equipo.getP4() == 1) {
            genreScore = genreScore + 2;
        } else {
            if (equipo.getP4() == 0) {
                genreScore = genreScore + 1;
            } else {
                if (equipo.getP4() == -1) {
                    genreScore = genreScore - 2;
                }
            }
        }
        if (equipo.getP5() == 1) {
            genreScore = genreScore + 2;
        } else {
            if (equipo.getP5() == 0) {
                genreScore = genreScore + 1;
            } else {
                if (equipo.getP5() == -1) {
                    genreScore = genreScore - 2;
                }
            }
        }
        //Dependiendo del rankign se ha realizado un subseccionador de 1-10 del 10-20 del 20-30 del 30-40 y del 40-50.
        //de 1-10 = se suma 5 al score 
        //del 10-20 = suma 4 al score
        //del 20-30 = suma 3 al score
        //del 30-40 = suma 2 al score
        //del 40-50 = suma 1 al score

        if (equipo.getRaking() <= 5) {
            genreScore = genreScore + 10;
        } else {
            if (equipo.getRaking() <= 10) {
                genreScore = genreScore + 9;
            } else {
                if (equipo.getRaking() <= 15) {
                    genreScore = genreScore + 8;
                } else {
                    if (equipo.getRaking() <= 20) {
                        genreScore = genreScore + 7;
                    } else {
                        if (equipo.getRaking() <= 25) {
                            genreScore = genreScore + 6;
                        } else {
                            if (equipo.getRaking() <= 30) {
                                genreScore = genreScore + 5;
                            } else {
                                if (equipo.getRaking() <= 35) {
                                    genreScore = genreScore + 4;
                                } else {
                                    if (equipo.getRaking() <= 40) {
                                        genreScore = genreScore + 3;
                                    } else {
                                        if (equipo.getRaking() <= 50) {
                                            genreScore = genreScore + 2;
                                        } else {
                                            if (equipo.getRaking() >= 50) {
                                                genreScore = genreScore + 1;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        //Dependiendo del numero de copas se ha realizado un subseccionador de 10-8 del 8-6 del 6-4 y del 4-2 del 2-0
        //de 10-8 = se suma 5 al score 
        //del 8-6 = suma 4 al score
        //del 6-4 = suma 3 al score
        //del 4-2 = suma 2 al score
        //del 2-0 = suma 1 al score
        if (equipo.getNumCopas() >= 8) {
            genreScore = genreScore + 20;
        } else {
            if (equipo.getNumCopas() == 7) {
                genreScore = genreScore + 15;
            } else {
                if (equipo.getNumCopas() == 6) {
                    genreScore = genreScore + 13;
                } else {
                    if (equipo.getNumCopas() == 5) {
                        genreScore = genreScore + 10;
                    } else {
                        if (equipo.getNumCopas() == 4) {
                            genreScore = genreScore + 8;
                        } else {
                            if (equipo.getNumCopas() == 3) {
                                genreScore = genreScore + 6;
                            } else {
                                if (equipo.getNumCopas() == 2) {
                                    genreScore = genreScore + 4;
                                } else {
                                    if (equipo.getNumCopas() == 1) {
                                        genreScore = genreScore + 2;
                                    }
                                }

                            }
                        }
                    }
                }
            }
        }
        return genreScore;
    }

}
